#!/bin/bash

# TraderTycoon 一键启动脚本
# 用于同时启动前端和后端服务

set -e

# 颜色定义
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

# 项目根目录
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKEND_DIR="${ROOT_DIR}/backend"
FRONTEND_DIR="${ROOT_DIR}/frontend"

# 日志文件
BACKEND_LOG="${ROOT_DIR}/backend.log"
FRONTEND_LOG="${ROOT_DIR}/frontend.log"
PID_FILE="${ROOT_DIR}/.server.pids"

# 清理函数
cleanup() {
    echo -e "\n${YELLOW}正在关闭服务...${NC}"
    if [ -f "$PID_FILE" ]; then
        while read pid; do
            if kill -0 "$pid" 2>/dev/null; then
                kill "$pid" 2>/dev/null || true
            fi
        done < "$PID_FILE"
        rm -f "$PID_FILE"
    fi
    # 清理 tail 进程
    if [ ! -z "$TAIL_PID" ] && kill -0 "$TAIL_PID" 2>/dev/null; then
        kill "$TAIL_PID" 2>/dev/null || true
    fi
    echo -e "${GREEN}服务已关闭${NC}"
    exit 0
}

# 捕获退出信号
trap cleanup SIGINT SIGTERM

# 检查 Node.js 是否安装
if ! command -v node &> /dev/null; then
    echo -e "${RED}错误: 未找到 Node.js，请先安装 Node.js (>=18)${NC}"
    exit 1
fi

NODE_VERSION=$(node -v | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
    echo -e "${RED}错误: Node.js 版本需要 >= 18，当前版本: $(node -v)${NC}"
    exit 1
fi

# 检查 npm 是否安装
if ! command -v npm &> /dev/null; then
    echo -e "${RED}错误: 未找到 npm${NC}"
    exit 1
fi

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}   TraderTycoon 服务启动脚本${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""

# 检查后端依赖
echo -e "${YELLOW}[1/4] 检查后端依赖...${NC}"
if [ ! -d "${BACKEND_DIR}/node_modules" ]; then
    echo -e "${YELLOW}后端依赖未安装，正在安装...${NC}"
    cd "$BACKEND_DIR"
    npm install
else
    echo -e "${GREEN}后端依赖已安装${NC}"
fi

# 检查前端依赖
echo -e "${YELLOW}[2/4] 检查前端依赖...${NC}"
if [ ! -d "${FRONTEND_DIR}/node_modules" ]; then
    echo -e "${YELLOW}前端依赖未安装，正在安装...${NC}"
    cd "$FRONTEND_DIR"
    npm install
else
    echo -e "${GREEN}前端依赖已安装${NC}"
fi

# 清理旧的日志和 PID 文件
rm -f "$BACKEND_LOG" "$FRONTEND_LOG" "$PID_FILE"

# 启动后端服务
echo -e "${YELLOW}[3/4] 启动后端服务...${NC}"
cd "$BACKEND_DIR"
npm run dev > "$BACKEND_LOG" 2>&1 &
BACKEND_PID=$!
echo "$BACKEND_PID" >> "$PID_FILE"
echo -e "${GREEN}后端服务已启动 (PID: $BACKEND_PID)${NC}"

# 等待后端启动
sleep 2

# 启动前端服务
echo -e "${YELLOW}[4/4] 启动前端服务...${NC}"
cd "$FRONTEND_DIR"
npm run dev > "$FRONTEND_LOG" 2>&1 &
FRONTEND_PID=$!
echo "$FRONTEND_PID" >> "$PID_FILE"
echo -e "${GREEN}前端服务已启动 (PID: $FRONTEND_PID)${NC}"

echo ""
echo -e "${BLUE}========================================${NC}"
echo -e "${GREEN}所有服务已启动！${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""
echo -e "${YELLOW}查看日志:${NC}"
echo -e "  后端: ${BLUE}tail -f ${BACKEND_LOG}${NC}"
echo -e "  前端: ${BLUE}tail -f ${FRONTEND_LOG}${NC}"
echo ""
echo -e "${YELLOW}按 Ctrl+C 停止所有服务${NC}"
echo ""

# 等待日志文件创建
sleep 2

# 实时显示日志
if [ -f "$BACKEND_LOG" ] && [ -f "$FRONTEND_LOG" ]; then
    # 同时监控两个日志文件
    tail -f "$BACKEND_LOG" "$FRONTEND_LOG" 2>/dev/null &
    TAIL_PID=$!
elif [ -f "$BACKEND_LOG" ]; then
    tail -f "$BACKEND_LOG" 2>/dev/null &
    TAIL_PID=$!
elif [ -f "$FRONTEND_LOG" ]; then
    tail -f "$FRONTEND_LOG" 2>/dev/null &
    TAIL_PID=$!
fi

# 持续等待，直到收到退出信号
while true; do
    sleep 1
done

